001 /* EVolve - an Extensible Software Visualization Framework 002 * Copyright (C) 2001-2002 Qin Wang 003 * 004 * This library is free software; you can redistribute it and/or 005 * modify it under the terms of the GNU Library General Public 006 * License as published by the Free Software Foundation; either 007 * version 2 of the License, or (at your option) any later version. 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Library General Public License for more details. 013 * 014 * You should have received a copy of the GNU Library General Public 015 * License along with this library; if not, write to the 016 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 017 * Boston, MA 02111-1307, USA. 018 */ 019 020 /* 021 * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/ 022 */ 023 024 package EVolve.data; 025 026 import EVolve.*; 027 import java.awt.*; 028 import java.util.*; 029 030 public class ElementFilter { 031 private int[] linkIndex; 032 private HashMap[] color; 033 protected Color colorBlue = new Color(120, 160, 255); 034 035 public ElementFilter(ElementDefinition elementDefinition, Selection[] selection) { 036 int count = 0; 037 for (int i = 0; i < elementDefinition.getFieldDefinition().length; i++) { 038 if (elementDefinition.getFieldDefinition()[i].getReference() != -1) { 039 count++; 040 } 041 } 042 linkIndex = new int[count]; 043 count = 0; 044 for (int i = 0; i < elementDefinition.getFieldDefinition().length; i++) { 045 if (elementDefinition.getFieldDefinition()[i].getReference() != -1) { 046 linkIndex[count] = i; 047 count++; 048 } 049 } 050 051 color = new HashMap[linkIndex.length]; 052 for (int i = 0; i < color.length; i++) { 053 //color[i] = new Color[Scene.getDataManager().getEntity()[elementDefinition.getFieldDefinition()[linkIndex[i]].getReference()].size()]; 054 color[i] = new HashMap(); 055 HashMap entities = Scene.getDataManager().getEntity()[elementDefinition.getFieldDefinition()[linkIndex[i]].getReference()]; 056 Iterator it = entities.keySet().iterator(); 057 while (it.hasNext()) { 058 Long key = (Long)it.next(); 059 color[i].put(key,colorBlue); 060 for (int k = 0; k < selection.length; k++) { 061 boolean isSelected = true; 062 063 for (int l = 0; l < selection[k].getLink().length; l++) { 064 if ((selection[k].getLink()[l].getSourceType() == elementDefinition.getType()) && 065 (selection[k].getLink()[l].getSourceIndex() == linkIndex[i])) { 066 isSelected = false; 067 for (int m = 0; m < selection[k].getSelected().length; m++) { 068 if (selection[k].getLink()[l].getTarget(key.longValue()) == selection[k].getSelected()[m].getId()) { 069 isSelected = true; 070 if ((color[i].get(key) == colorBlue) && (selection[k].getColor() != null)) { 071 color[i].put(key,selection[k].getColor()); 072 } 073 break; 074 } 075 } 076 break; 077 } 078 } 079 if ((!isSelected) && (selection[k].getColor() == null)) { 080 color[i].put(key,null); 081 break; 082 } 083 } 084 } 085 086 /*for (int j = 0; j < color[i].length; j++) { 087 color[i][j] = colorBlue;//Color.black; 088 for (int k = 0; k < selection.length; k++) { 089 boolean isSelected = true; 090 for (int l = 0; l < selection[k].getLink().length; l++) { 091 if ((selection[k].getLink()[l].getSourceType() == elementDefinition.getType()) && (selection[k].getLink()[l].getOriginMappedId() == linkIndex[i])) { 092 isSelected = false; 093 for (int m = 0; m < selection[k].getSelected().length; m++) { 094 if (selection[k].getLink()[l].getTarget(j) == selection[k].getSelected()[m].getId()) { 095 isSelected = true; 096 if ((color[i][j] == colorBlue) && (selection[k].getColor() != null)) { 097 color[i][j] = selection[k].getColor(); 098 } 099 break; 100 } 101 } 102 break; 103 } 104 } 105 if ((!isSelected) && (selection[k].getColor() == null)) { 106 color[i][j] = null; 107 break; 108 } 109 } 110 }*/ 111 } 112 } 113 114 public Color getColor(Element element) { 115 Color result = colorBlue;//Color.black; 116 for (int i = 0; i < linkIndex.length; i++) { 117 if (color[i].get(new Long(element.getField()[linkIndex[i]])) == null) { 118 return null; 119 } 120 if (result == colorBlue/*Color.black*/) { 121 result = (Color)color[i].get(new Long(element.getField()[linkIndex[i]])); 122 } 123 } 124 return result; 125 } 126 }